package com.qili.core.quartz.CustomQuartz;

import cn.hutool.core.collection.CollectionUtil;
import com.qili.entity.base.BaseDict;
import com.qili.entity.supervisor.SupervisorFile;
import com.qili.service.base.BaseDictService;
import com.qili.service.supervisor.*;
import com.qili.util.DateUtil;
import lombok.extern.java.Log;
import org.apache.commons.lang3.StringUtils;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 定时清理supervisor_file表
 */
@Log
public class CheckSupervisorFileJob implements Job {

    @Autowired
    SupervisorFileService supervisorFileService;
    @Autowired
    BaseDictService baseDictService;

        @Override
        public void execute(JobExecutionContext context) throws JobExecutionException {
            System.out.println("检查supervisor_file表任务=======================");
            run();
            System.out.println("JobDemo1：下次执行时间====="+
                    new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
                            .format(context.getNextFireTime())+"==============");
        }

        public void run() {
//            File txtFile = createTxtFile();
//            boolean txtWrite = txtFile != null;
//            FileWriter fw = null;
//
//            //没有对应的操作系统文件的数据
//            List<SupervisorFile> noOsFileIds = new ArrayList<SupervisorFile>();
//            //没有父文件夹字段的数据
//            List<SupervisorFile> noParentFileIds = new ArrayList<SupervisorFile>();
//            //父id不存在于supervisor_file表中
//            List<SupervisorFile> parentInv = new ArrayList<>();
//            List<SupervisorFile> supervisorFiles = supervisorFileService.selectAll();
//            List<BaseDict> firstDictList = baseDictService.selectByTypeCode("ITFIRST001");
//            List<String> firstList = firstDictList.stream().map(BaseDict::getBadtCode).collect(Collectors.toList());
//            if(CollectionUtil.isNotEmpty(supervisorFiles)){
//                setUrl(supervisorFiles);
//                for(SupervisorFile file : supervisorFiles){
//                    String fileDbUrl = file.getUrl();
//                    if(StringUtils.isNotBlank(fileDbUrl)){
//                        File osFile = new File(fileDbUrl);
//                        if(!osFile.exists() && (!firstList.contains(file.getId()))   ){
//                            noOsFileIds.add(file);
////                            supervisorFileService.deleteByPrimaryKey(file);
//                            continue ;
//                        }
//                        String superiorId = file.getSuperiorId();
//                        file.setZskfileType(osFile.isDirectory()?"1":"2");
//                        if(StringUtils.isBlank(superiorId) && (!"cc".equals(file.getFileName()))){
//                            noParentFileIds.add(file);
//                            supervisorFileService.setFilePathDics(file);
//                            continue ;
//                        }else if(!"cc".equals(file.getFileName())){
//                            SupervisorFile parentFile = supervisorFileService.selectByPrimaryKey(superiorId);
//                            if(null == parentFile){
//                                parentInv.add(file);
//                                file.setSuperiorId(null);
//                                supervisorFileService.setFilePathDics(file);
//                            }else{
//                                file.setUrl(osFile.getPath());
//                                supervisorFileService.updateByPrimaryKeySelective(file);
//                            }
//                        }
//                    }
//                }
//
//                if(txtWrite){
//                    try{
//                        fw = new FileWriter(txtFile, true);
//
//                    }catch (IOException e){
//                        e.printStackTrace();
//                    }
//                    PrintWriter pw = new PrintWriter(fw);
//                    pw.println("");
//                    pw.println("");
//                    pw.println("");
//                    pw.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
//                    pw.flush();
//                    pw.println(DateUtil.getCurrentDateTimeString()+"检查结果如下:");
//                    pw.flush();
//                    pw.println("总文件个数:"+supervisorFiles.size()+"个");
//                    pw.flush();
//                    pw.println("");
//                    pw.println("***********************************************************************************************************************************");
//                    pw.flush();
//                    pw.println("没有对应磁盘文件的文件("+noOsFileIds.size()+"个)");
//                    pw.flush();
//                    for(SupervisorFile sf : noOsFileIds){
//                        pw.println(sf.getId());
//                        pw.flush();
//                    }
//                    pw.println("");
//                    pw.println("************************************************************************************************************************************");
//                    pw.println("没有父目录字段的文件("+noParentFileIds.size()+"个)");
//                    pw.flush();
//                    for(SupervisorFile sf : noParentFileIds){
//                        pw.println("id:"+sf.getId()+",,url: "+sf.getUrl()+",,名称:"+sf.getFileName());
//                        pw.flush();
//                    }
//                    pw.println("");
//                    pw.println("***********************************************************************************************************************************");
//                    pw.flush();
//                    pw.println("父目录字段无效的文件("+parentInv.size()+"个)");
//                    pw.flush();
//                    for(SupervisorFile sf : parentInv){
//                        pw.println("id:"+sf.getId()+",,url: "+sf.getUrl()+",,名称:"+sf.getFileName());
//                        pw.flush();
//                    }
//                    pw.println("");
//                    pw.println("*************************************************************************************************************************************");
//                    pw.flush();
//                    pw.println("检查结束");
//                    pw.flush();
//                    try{
//                        fw.flush();
//                        pw.close();
//                        fw.close();
//                    }catch (IOException e){
//                        e.printStackTrace();
//                    }
//                    return ;
//                }
//
//                log.warning("检查结果如下:");
//                log.info("总文件个数:"+supervisorFiles.size()+"个");
//                log.warning("*******************************");
//                log.warning("没有对应磁盘文件的文件("+noOsFileIds.size()+"个)");
//                for(SupervisorFile sf : noOsFileIds){
//                    log.warning("id:"+sf.getId()+",,url: "+sf.getUrl()+",,名称:"+sf.getFileName());
//                }
//                log.warning("*******************************");
//                log.warning("没有父目录字段的文件("+noParentFileIds.size()+"个)");
//                for(SupervisorFile sf : noParentFileIds){
//                    log.warning("id:"+sf.getId()+",,url: "+sf.getUrl()+",,名称:"+sf.getFileName());
//                }
//                log.warning("*******************************");
//                log.warning("父目录字段无效的文件("+noParentFileIds.size()+"个)");
//                for(SupervisorFile sf : parentInv){
//                    log.warning("id:"+sf.getId()+",,url: "+sf.getUrl()+",,名称:"+sf.getFileName());
//                }
//                log.warning("*******************************");
//                log.warning("检查结束");
//            }
        }

    private void setUrl(List<SupervisorFile> supervisorFiles) {
        for(SupervisorFile file : supervisorFiles){
            if(StringUtils.isNotBlank(file.getId()) && StringUtils.isNotBlank(file.getUrl())){
                File osFile = new File(file.getUrl());
                SupervisorFile updateFile = new SupervisorFile();
                updateFile.setId(file.getId());
                updateFile.setUrl(osFile.getPath());
                supervisorFileService.updateByPrimaryKeySelective(updateFile);
            }
        }
    }

    private File createTxtFile() {
            File file = new File("./checkResult.txt");
            System.out.println(file.getPath());
            if(!file.exists()){
                try {
                    file.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                    return null;
                }
            }
            return file;
        }

    }
